package com.yitong.equipment.database.dao

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import com.yitong.equipment.database.entity.User
import io.reactivex.Completable
import io.reactivex.Observable
import io.reactivex.Single
import kotlinx.coroutines.flow.Flow

@Dao
interface UserDao {

    //查询所有用户
    @Query("select * from User")
    fun getUsers(): Single<List<User>>

    //查询所有用户 协程
    @Query("select * from User")
    fun getUsers1():List<User>

    //插入用户
    /**
       onConflict：默认值是OnConflictStrategy.ABORT，表示当插入有冲突的时候的处理策略。
       OnConflictStrategy封装了Room解决冲突的相关策略：
       1. OnConflictStrategy.REPLACE：冲突策略是取代旧数据同时继续事务。
       2. OnConflictStrategy.ROLLBACK：冲突策略是回滚事务。
       3. OnConflictStrategy.ABORT：冲突策略是终止事务。
       4. OnConflictStrategy.FAIL：冲突策略是事务失败。
       5. OnConflictStrategy.IGNORE：冲突策略是忽略冲突。
     */
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun addUsers(users: List<User>): Completable

    //多个条件查找
    @Query("SELECT * FROM User WHERE name = :name AND phone = :phone")
    fun getUserByNamePhone(name: String, phone: String): Single<List<User>>

    //模糊查询
    @Query("SELECT * FROM User WHERE name  like '%' || :name || '%' ")
    fun getUserByContent(name: String): Single<List<User>>

    //按条件删除
    @Query("delete from User where user.name=:nickname")
    fun delete(nickname: String): Completable

    @Query("delete from User")
    fun deleteAll(): Completable

}